use tauri::{
    AppHandle,
    Manager
};

/// 销毁所有窗口，除了托盘窗口
#[tauri::command]
pub async fn destroy_all_windows_except_tray(app: AppHandle) -> Result<(), String> {
    let windows = app.webview_windows();

    // 定义需要保留的窗口标签数组
    let reserved_windows = ["tray", "free", "login"];

    for (label, window) in windows {
        // 检查是否为需要保留的窗口
        if !reserved_windows.contains(&label.as_str()) {
            println!("准备销毁窗口: {}", label);
            match window.close() {
                Ok(_) => println!("窗口 {} 销毁成功", label),
                Err(e) => println!("窗口 {} 销毁失败: {}", label, e),
            }
        }
    }

    Ok(())
}

/// 退出应用程序的命令
/// * `exit_code` - 退出代码，0表示可正常退出，这里写死前端就不用传参了
#[tauri::command]
pub fn app_exit() {
    // 使用标准库的exit函数退出应用程序
    // 这个函数不会返回，而是直接终止进程
    // 该方法会打印报错信息，但是可以忽略，毕竟已经退出了嘛：
    // Failed to unregister class Chrome_WidgetWin_0. Error = 1412
    std::process::exit(0);
}
